home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Aminet
/
comm
/
xeno
/
bbbbscd.lha
/
BBBBScd
/
System
/
s
/
bbsExtDL.baud
< prev
next >
Wrap
Text File
|
1995-03-18
|
22KB
|
823 lines
/* $VERS: bbsExtDL.baud 8.2 (17.10.94) copyright 1992-94 Richard Stockton
FREELY DISTRIBUTABLE
****************************************************************************
CONVERTED FOR XENOLINK PRO BBS. $VERS:1.0 (18.03.95) by Derek Scott,2:259/75
****************************************************************************
Allows Xenolink user to download from extra devices like CD drives.
Keeps track of time left to this user.
Just ignores file or directory names that contain spaces because Xenolink
would be unable to download them anyway. (But handles recursive files &
directories OK, archived by LZX by use of 'SELECT ALL' parameter)
Ignores icons (files that end in .info).
A textfile CD_Exclude , controls exclusion of drawers on certain CDs that
contain copyright files. Other specific files or directories can be excluded
by adding their paths to the CD_Exclude textfile, one path per line.
Super-sysop may select very large directories and have their formatted
display lists cached as textfiles in bbspath'Cache'. This can greatly
improve access time for very large drawers, especially if they contain
sub-directories.
Ability to 'READ' text files from within CD door.
Configurable 'maximum size' of user selected files/output archive.
All Selected files are Archived with LZX and attached to private mail for
user. (requires "Junkmail" Xenolink utility by Alan Bland)
*/
OPTIONS RESULTS /*sets internal default to request RESULTS string from host*/
FF='0C'x /* defines hex-decimal value for FORM FEED (clear screen)*/
CR='0D'x /* defines hex-decimal value for CARRIAGE RETURN*/
SIGNAL ON BREAK_C
SIGNAL ON BREAK_E
SIGNAL ON ERROR
PARSE ARG name
cfgfile='xconfig:BBBBScd.config'
/* Open the support library if it is not already open. (yawn...)*/
if ~show('L',"rexxsupport.library") THEN
DO
addlib('rexxsupport.library',0,-30,0)
END
if ~show('L',"rexxmathlib.library") THEN
DO
addlib('rexxmathlib.library',0,-30,0)
END
PRINT ' '
if ~show('L',"rexxarplib.library") THEN
DO
addlib('rexxarplib.library',0,-30,0)
END
IF ~SHOW('P','QuickSortPort') THEN
DO
/* Add the QuickSort port, so we can use QSORT.
* First check if the port is already up. If not, run QuickSort
* and wait for the port to be there */
if ~showlist('p','QuickSortPort') then
do
ADDRESS COMMAND "run quicksort >NIL:"
do i = 1 to 10
if ~showlist('p','QuickSortPort') then call delay 20
else leave i
end
if showlist('p','QuickSortPort') then call addlib('QuickSortPort',-30)
end
end
IF ~SHOW('P','QuickSortPort') THEN EXIT 666
/* read the configuration parameters from XCONFIG:BBBBScd.CFG */
x=OPEN(f,cfgfile,'R')
IF x~=0 THEN
DO
bbspath=READLN(f)
devlist=READLN(f)
sysoplevel=VALUE(WORD(READLN(f),1))
junk=READLN(f)
junk=READLN(f)
xrecursive_size=VALUE(WORD(READLN(f),1))
junk=READLN(f)
lzxflag=READLN(f)
CALL CLOSE(f)
END
ELSE
/* can't open config file, so use defaults... :) */
DO
bbspath='doors:bbbbsCD/'
devlist='CD0: CD1: CD2: CD50: CD51: CD52: CD53: CD54: CD55: CD56:'
sysoplevel=224
lzxflag='N'
END
/***************************************************************************/
/* read additional parameters about user, passed by Xenolink node */
x=OPEN(f,'ram:CDuserinfo','R')
IF x~=0 THEN
DO
ulevel=READLN(f)
maxtimex=READLN(f)
linesperpagex=READLN(f)
menuset=READLN(f)
nodex=READLN(f)
namex=READLN(f)
CALL CLOSE(f)
END
ELSE EXIT
IF name~=namex THEN
DO
PRINT '*ERROR* Username does not match, please retry!'
EXIT
END
level=VALUE(ulevel)
maxtime=VALUE(maxtimex)*60
IF maxtime > 3600 THEN maxtime=3600
linesperpage=VALUE(linesperpagex)
colorflag=VALUE(menuset)
node=VALUE(nodex)
exclude=''
x=OPEN(f,bbspath'CD_Exclude','R')
IF x~=0 THEN exclude=READCH(f,65000)
CALL CLOSE(f)
exclude=UPPER(TRANSLATE(exclude,' ','0A'x))
lists.=''
lists.0=0
maxtime=maxtime-30
CALL TIME('R')
CR='0D'x
def=''
pen3='
'
IF colorflag<1 THEN
DO
def=''
pen3=''
END
ELSE colorflag=1
saytxt=FF
PRINT saytxt
x=OPEN(f,bbspath'EXT_INFO','R')
IF x=0 THEN PRINT bbspath'EXT_INFO failed to open!'
ELSE
DO
DO i=1 WHILE ~EOF(f)
saytxt=READLN(f)||CR
PRINT saytxt
IF (i+2)//linesperpage=0 THEN
DO
PROMPT 2 NORMAL 'Press RETURN'
junk=Result
saytxt='1B'x'M'||'1B'x'M'CR
PRINT saytxt
END
END
CALL CLOSE(f)
END
selected=''
path=''
templist=devlist
devlist=''
longest=0
CALL PRAGMA('W','N') /* disk requesters OFF */
CALL PRAGMA('D',bbspath'Information')
test3=PRAGMA('D')
DO i=1 TO WORDS(templist)
test=WORD(templist,i)
IF ~EXISTS(test) THEN ITERATE i
IF SHOWLIST('A',UPPER(LEFT(test,LENGTH(test)-1))) THEN test2=test
ELSE
DO
CALL PRAGMA('D',test)
test2=PRAGMA('D')
/************************************************************/
/* DAS - Fool System into thinking Assigns are REAL Devices */
IF test2='d::' THEN test2='Pro_CD1:'
/* DAS */
/************************************************************/
IF test2=test3 THEN ITERATE i
IF WORDS(test2)>1 THEN test2=test
END
devlist=STRIP(devlist test2)
IF LENGTH(test2)>longest THEN longest=LENGTH(test2)
END
cols=76%(longest+8)
IF devlist='' THEN
DO
PRINT
saytxt='*** Sorry, no External Devices are available! ***'CR
PRINT saytxt
PRINT
PROMPT 2 NORMAL 'Press RETURN'
junk=Result
EXIT('')
END
picklist=devlist
IF WORDS(picklist)=1 THEN
DO
path=picklist
IF RIGHT(path,1)~=':' THEN path=path'/'
picklist=makepicklist()
END
ELSE
DO
lists.0=1
dirs=WORDS(devlist)
END
PROMPT 2 NORMAL 'Press RETURN'
junk=Result
DO loop=1
test=TIME('E')
IF test>(maxtime-100) THEN
DO
PRINT
IF test>maxtime THEN
DO
saytxt='*** This session''s time is expiring! ***'CR
PRINT saytxt
PRINT
LEAVE loop
END
ELSE PRINT '*** Less than 2 minutes remaining! ***'
PRINT CR
END
filename=pick(picklist)
IF filename='' THEN
DO
temp=path
IF RIGHT(temp,1)='/' THEN temp=LEFT(temp,LENGTH(temp)-1)
IF FIND(UPPER(devlist),UPPER(temp))>0 THEN
DO
IF WORDS(devlist)=1 THEN ITERATE loop
picklist=devlist
path=''
ITERATE loop
END
ELSE
DO
test=RIGHT(path,1)
IF test='/' THEN path=LEFT(path,LENGTH(path)-1)
slash=LASTPOS('/',path)
IF slash=0 THEN slash=LASTPOS(':',path)
path=LEFT(path,slash)
END
END
IF filename=':-)' THEN ITERATE loop
tempath=path||filename
temp=WORD(STATEF(tempath),1)
IF temp='FILE' THEN
DO
IF FIND(UPPER(selected),UPPER(tempath))=0 THEN
selected=selected tempath
ELSE selected=DELWORD(selected,FIND(UPPER(selected),UPPER(tempath)),1)
shosel=''
ITERATE loop
END
ELSE IF temp='DIR' THEN
DO
path=tempath
test=RIGHT(path,1)
IF test~='' & test~='/' & test~=':' THEN path=path'/'
END
ELSE IF UPPER(filename)='DONE' THEN LEAVE loop
IF path~='' THEN picklist=makepicklist()
END
selected=STRIP(selected)
test=''
/* IF WORDS(selected)>0 THEN test=UPPER(RIGHT(selected,4))
IF selected~='' & test~='.LZX' & test~='.LHA' & test~='.LZH' & test~='.DMS' & test~='.ZOO' THEN */
IF WORDS(selected)>0 THEN
DO
PRINT
PRINT 'You may choose to have your selection(s) archived using LhA or LZX.'
PRINT 'Answer [Y] to begin, or [N] to CANCEL ALL your selected files.'
PRINT 'The completed archive will be attached to email addressed to you.'
PRINT
PROMPT 2 NORMAL 'Archive selected files? (nY) > '
temp=Result
temp=UPPER(temp)
IF LEFT(temp,1)~='N' THEN
DO
DO jj = 1
PRINT ' '
IF lzxflag='Y' THEN
DO
PROMPT 2 NORMAL 'Archive using lz(X) or l(H)a? (xH) > '
temp=Result
IF temp='' THEN iterate jj
temp=LEFT(UPPER(temp),1)
IF temp~='X' & temp~='H' THEN iterate jj
END
ELSE
temp='H' /* temporarily - default to LHA */
ADDRESS AREXX bbsArcExt.rexx name nodex temp selected
LEAVE jj
END
selected=''
PRINT
PRINT 'The BBS will notify you online when your archive is ready.'
PRINT
END
END
PRINT 'Returning to the BBS...'
PRINT ' '
EXIT
makepicklist:
IF path='' THEN RETURN ''
IF STORAGE()<100000 THEN
DO
lists.=''
lists.0=0
IF WORDS(devlist)>1 THEN
DO
lists.0=1
lists.1.0=devlist
END
END
DO i=1 TO lists.0
IF path=lists.i THEN RETURN lists.i.0
END
cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
IF cname~='' & EXISTS(bbspath'Cache/'cname) THEN
DO cloop=1 TO 1
k=lists.0+1
lists.0=k
x=OPEN(f,bbspath'Cache/'cname'.','R')
IF x=0 THEN PRINT bbspath'Cache/'cname'. failed to open!'
ELSE
DO
cpath=READLN(f)
IF cpath=path THEN lists.k=path
ELSE
DO
IF level>sysoplevel THEN
PRINT path 'does not match cache path in' cname'. !'
CALL CLOSE(f)
lists.0=lists.0-1
LEAVE cloop
END
DO i=1
line=READLN(f)
IF EOF(f) THEN LEAVE i
IF colorflag~=1 THEN
DO
n=POS('1B'x,line)
DO WHILE n>0
DO m=2
IF DATATYPE(SUBSTR(line,n+m,1),'M') | (n+m+1)>LENGTH(line) THEN
leave m
END
line=DELSTR(line,n,m+1)
n=POS('1B'x,line)
END
END
lists.k.i=line
END
CALL CLOSE(f)
lists.k.ROWS=i-1
END
x=OPEN(f,bbspath'Cache/'cname,'R')
IF x=0 THEN
DO
PRINT bbspath'Cache/cname failed to open!'CR
CALL CLOSE(f)
lists.0=lists.0-1
LEAVE cloop
END
ELSE
DO
plist=READCH(f,65000)
CALL CLOSE(f)
lists.k.0=plist
RETURN plist
END
END
PRINT 'Loading...'CR
CALL FileList(path'*',filelist,'F','N')
IF filelist.0>1 THEN CALL QSORT(1,filelist.0,filelist)
CALL FileList(path'*',dirlist,'D','N')
IF dirlist.0>1 THEN CALL QSORT(1,dirlist.0,dirlist)
plist=''
dirs=0
longest=0
DO i=1 TO filelist.0
IF WORDS(filelist.i)~=1 THEN ITERATE i
IF filelist.i='' THEN ITERATE i
IF UPPER(RIGHT(filelist.i,5))='.INFO' THEN ITERATE i
IF FIND(exclude,UPPER(path||filelist.i))>0 THEN ITERATE i
plist=STRIP(plist filelist.i)
IF LENGTH(filelist.i)>longest THEN longest=LENGTH(filelist.i)
END
DO i=1 TO dirlist.0
IF WORDS(dirlist.i)~=1 THEN ITERATE i
IF FIND(exclude,UPPER(path||dirlist.i))>0 THEN ITERATE i
plist=STRIP(plist dirlist.i)
IF LENGTH(dirlist.i)>longest THEN longest=LENGTH(dirlist.i)
dirs=dirs+1
END
cols=76%(longest+9)
lists.0=lists.0+1
i=lists.0
lists.i=path
lists.i.0=plist
DROP filelist. dirlist.
RETURN plist
pick:
PARSE ARG list
selection=''
DO k=1 TO lists.0
IF path=lists.k THEN LEAVE k
END
IF ~DATATYPE(lists.k.ROWS,'N') THEN
DO
items=WORDS(list)
IF items<75 & dirs<25 THEN PRINT 'Formatting' items 'items...'
ELSE PRINT 'Please be patient, formatting' items 'items may take a while the first time...'
lists.k.ROWS=(items%cols)+((items//cols)>0)
IF cols>items THEN cols=items
IF cols<1 THEN cols=1
longest=(76%cols)-8
lists.k=path
DO j=0 TO cols-1
DO i=1 TO lists.k.ROWS
thisnum=j*lists.k.ROWS+i
IF thisnum<=items THEN
DO
thisitem=WORD(list,thisnum)
filestat=STATEF(path||thisitem)
thisitem=LEFT(thisitem,longest)' '
IF WORD(filestat,1)='DIR' THEN
lists.k.i=lists.k.i||pen3'(dir) 'thisitem||def
ELSE
DO
bytes=WORD(filestat,2)
IF bytes<10000 THEN
lists.k.i=lists.k.i||RIGHT(bytes,5) thisitem
ELSE IF bytes>1023999 THEN
lists.k.i=lists.k.i||RIGHT(bytes%1024000,4)'m' thisitem
ELSE lists.k.i=lists.k.i||RIGHT(bytes%1024,4)'k' thisitem
END
END
END
END
IF level>sysoplevel & items>24 THEN
DO
PRINT items 'items,' dirs 'dirs,' lists.k.ROWS 'rows'
PROMPT 2 NORMAL 'FileCache' path'? (Ny) > '
junk=Result
junk=UPPER(LEFT(junk,1))
IF junk='Y' THEN
DO
CALL MAKEDIR(bbspath'Cache')
cname=STRIP(RIGHT(COMPRESS(path,' ._-:/'),29))
x=OPEN(f,bbspath'Cache/'cname,'W')
IF x=0 THEN PRINT 'Unable to open cache file' cname'!'
ELSE
DO
CALL WRITECH(f,list)
CALL CLOSE(f)
END
x=OPEN(f,bbspath'Cache/'cname'.','W')
IF x=0 THEN
DO
PRINT 'Unable to open cache file' cname'. !'CR
CALL DELETE(bbspath'Cache/'cname)
END
ELSE
DO
CALL WRITELN(f,path)
DO i=1 TO lists.k.ROWS
CALL WRITELN(f,TRIM(lists.k.i))
END
CALL CLOSE(f)
PRINT path 'has been cached.'
END
END
END
END
IF selected~='' THEN
DO
PRINT
w=WORDS(selected)
temp=pen3' 'w def'selected files.'
IF shosel~=1 THEN
DO
saytxt=pen3'selected:'def||CR
PRINT saytxt
DO i=1 TO w
saytxt=WORD(selected,i)||CR
PRINT saytxt
END
END
ELSE
DO
temp='Enter' pen3'SHOW S'def'elected to display'temp
PRINT temp||CR
END
IF w>5 THEN shosel=1
END
PRINT CR
saytxt='current path ='pen3 path||def||CR
PRINT saytxt
saytxt=LEFT('-',75,'-')||CR
PRINT saytxt
DO i=1 TO lists.k.ROWS
saytxt=TRIM(lists.k.i)||CR
PRINT saytxt
IF (i+2)//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
PROMPT 2 NORMAL ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
junk=Result
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
END
END
nonstop=0
saytxt=LEFT('-',75,'-')||CR
PRINT saytxt
CALL whodat()
readflag=0
DO getloop=1
pstring=showtime()' Enter ''?'' for HELP > '
PROMPT 80 NORMAL pstring
selection=Result
/* PARSE selection */
IF selection='?' THEN
DO
CALL help()
PROMPT 2 NORMAL 'Press RETURN'
junk=Result
selection=';-)'
LEAVE getloop
END
IF LEFT(selection,1)='/' THEN selection=STRIP(SUBSTR(selection,2))
IF WORDS(selection)>1 THEN
DO
IF LEFT(UPPER(selection),6)='SHOW S' THEN
DO
shosel=''
selection=';-)'
LEAVE getloop
END
IF UPPER(selection)='SELECT ALL' THEN
DO
IF path='' | RIGHT(path,1)=':' | POS(UPPER(path),UPPER(devlist))>0 THEN
DO
PRINT
saytxt=pen3'*** Archiving entire devices at one time is NOT allowed! ***'def||CR
PRINT saytxt
PRINT
ITERATE getloop
END
CALL selall(path xrecursive_size)
shosel=''
selection=':-)'
LEAVE getloop
END
ELSE IF UPPER(WORD(selection,1))='READ' THEN
DO
readflag=1
selection=STRIP(DELWORD(selection,1,1))
END
ELSE IF UPPER(WORD(selection,1))='CD' THEN selection=SUBSTR(selection,4)
ELSE IF UPPER(WORD(selection,1))='DIR' THEN selection=SUBSTR(selection,5)
END
i=FIND('DONE' UPPER(list),UPPER(selection))
IF i=0 THEN
DO
i=FIND('DONE' UPPER(list),UPPER(selection':'))
IF i=0 THEN
DO
IF UPPER(selection)='KINGFISHER' THEN
DO
IF EXISTS('rexx:KingFisher.rexx') THEN
CALL KingFisher.rexx(name '. .' colorflag maxtime)
ELSE IF EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
DO
curdir=PRAGMA('D',bbspath'rexxDoors')
CALL KingFisher.rexx(name '. .' colorflag maxtime)
curdir=PRAGMA('D',curdir)
END
ELSE PRINT 'KingFisher.rexx not found!'
ITERATE getloop
END
ELSE IF UPPER(selection)='Q' THEN selection='DONE'
ELSE ITERATE getloop
END
ELSE selection=selection':'
END
IF selection='' & path='' THEN ITERATE getloop
ELSE IF i>1 THEN selection=WORD(list,i-1)
IF readflag=1 THEN
DO
endtest=UPPER(RIGHT(selection,4))
IF FIND('.ARC .DMS .LZH .LHA .ZIP .ZOO',endtest)>0 THEN
DO
CALL Contents.rexx(path||selection)
IF EXISTS('RAM:CONTENTS') THEN CALL showtext('RAM: CONTENTS')
END
ELSE CALL showtext(path selection)
readflag=0
selection=';-)'
END
LEAVE getloop
END
RETURN selection
selall: PROCEDURE EXPOSE selected pen3 def CR
PARSE ARG dir xrecursive_size .
IF FIND(exclude,UPPER(dir))>0 THEN RETURN
saytxt='Sizing'pen3 dir||def||CR
PRINT saytxt
IF RIGHT(dir,1)~='/' THEN dir=dir'/'
/* DAS */
sizefile='RAM:bbsCDsize'nodex
ADDRESS COMMAND 'c:nl >'sizefile' 'dir' -Z -W -F'
ADDRESS COMMAND 'c:WAIT 5'
okflag=0
fsize=0
DO zloop=1 TO 10
zz=OPEN(f10,sizefile,'r')
IF zz=0 THEN
DO
PRINT 'Waiting for Sizefile...'
ADDRESS COMMAND 'c:WAIT 5'
ITERATE zloop
END
ELSE
DO
okflag=1
LEAVE zloop
END
END
IF okflag~=1 THEN
DO
PRINT 'Sorry, too many files... SELECT ALL cancelled!'
ADDRESS COMMAND 'C:WAIT 2'
RETURN
END
zzsizetot=0
zzfiletot=0
zzdirtot=0
zzpath=''
DO zz2=1
line = READLN(f10)
IF EOF(f10) THEN LEAVE zz2
IF line='' THEN ITERATE
IF UPPER(WORD(line,2))='FILES' THEN
DO
IF UPPER(WORD(line,1))='NO' THEN iterate zz2
PRINT RIGHT(zzpath,32)', 'VALUE(WORD(line,1))' file(s), 'VALUE(WORD(line,13))' bytes'
zzsizetot=zzsizetot+VALUE(WORD(line,13))
zzfiletot=zzfiletot+VALUE(WORD(line,1))
zzdirtot=zzdirtot+1
END
ELSE IF UPPER(WORD(line,1))="DIRECTORY" THEN zzpath=WORD(line,3)
END
CALL CLOSE(f10)
saytxt=pen3'Total:'def' 'zzdirtot''pen3' dir(s), 'def''zzfiletot''pen3' file(s), 'def''zzsizetot''pen3' bytes'||def||CR
PRINT saytxt
IF zzsizetot>xrecursive_size THEN
DO
saytxt=pen3'*CANCELLED*'def' the maximum bytes allowed per 'pen3'SELECT ALL'def' is: 'pen3''xrecursive_size' bytes!!!'||def||CR
PRINT saytxt
END
IF zzsizetot~>xrecursive_size THEN selected=selected' 'dir'*'
ADDRESS COMMAND 'C:WAIT 4'
RETURN
showtext:
PARSE ARG tpath' 'textfile
test=RIGHT(tpath,1)
IF test~='' & test~=':' & test~='/' THEN tpath=tpath'/'
x=OPEN(f,STRIP(tpath||textfile),'R')
IF x=0 THEN RETURN
test=READCH(f,64)
mask=XRANGE(,'06'x)||XRANGE('0E'x,'1A'x)||XRANGE('1C'x,'1F'x)
IF VERIFY(test,mask,'M')>0 THEN
DO
CALL CLOSE(f)
testloc=VERIFY(test,mask,'M')
saytxt='*** not an archive or a text file! ***'CR
PRINT saytxt
saytxt='Character number' testloc 'is ASCII' C2D(SUBSTR(test,testloc,1))||CR
PRINT saytxt
RETURN
END
CALL SEEK(f,0,'B')
PRINT
saytxt='-' tpath||textfile '-'CR
PRINT saytxt
DO i=1 WHILE ~EOF(f)
saytxt=COMPRESS(READLN(f),CR||'0C'x)||CR
PRINT saytxt
IF i//(linesperpage-1)=0 & nonstop~=1 THEN
DO
CALL whodat()
PROMPT 2 NORMAL ' - ['pen3'N'def']on-stop ['pen3'Q'def']uit ['pen3'RETURN'def']=Continue - '
junk=Result
IF LEFT(UPPER(junk),1)='Q' THEN LEAVE i
IF LEFT(UPPER(junk),1)='N' THEN nonstop=1
/* IF colorflag=1 | ADDRESS()~='BAUD'THEN
saytxt='1B'x'M'||LEFT('',60)||'1B'x'M'||CR
PRINT saytxt */
END
END
CALL CLOSE(f)
IF i//(linesperpage-1)>1 THEN
DO
PROMPT 2 NORMAL ' - ['pen3'RETURN'def']=Continue - '
junk=Result
END
nonstop=0
RETURN
whodat:
IF ADDRESS()~='BAUD' THEN RETURN
MSG RIGHT(' ',66-LENGTH(name)) '1B'x'M'||'
'||'
'||' 'name' level 'level' '||'
'
RETURN
help:
PRINT
PRINT
saytxt=pen3'- HELP -'def
PRINT saytxt
PRINT
saytxt='You can navigate through directory levels using the following commands.'CR
PRINT saytxt
saytxt='Remember that the name must appear in the display before you can select it.'CR
PRINT saytxt
saytxt='Filenames are displayed with their filesizes on the left, and directories'CR
PRINT saytxt
saytxt='will have a' pen3'(dir)'def' on their left.'CR
PRINT saytxt
PRINT
saytxt='To select an item from the displayed list, enter its name as displayed.'CR
PRINT saytxt
saytxt='If the selected item is a' pen3'directory'def', its contents will be displayed.'CR
PRINT saytxt
saytxt='If the selected item is a file, it is added to the ''selected'' list.'CR
PRINT saytxt
saytxt='To remove a selected file from the list, enter its name again.'CR
PRINT saytxt
PRINT
saytxt='To display the parent directory, enter an ''empty'' RETURN'CR
PRINT saytxt
saytxt='To read a textfile or see the contents of an archive, enter' pen3'READ'def 'filename.'CR
PRINT saytxt
saytxt='To select ALL items from the current display, including the contents of all'CR
PRINT saytxt
saytxt='displayed directories and their sub-directories, enter 'pen3'SELECT ALL'def'.'CR
PRINT saytxt
PRINT
IF EXISTS('rexx:KingFisher.rexx') | EXISTS(bbspath'rexxDoors/KingFisher.rexx') THEN
DO
saytxt='Enter 'pen3'KINGFISHER'def' to use the online search utility.'CR
PRINT saytxt
END
PRINT
saytxt='Enter'pen3 'DONE' def'to return to the BBS (and download any selected files)'CR
PRINT saytxt
PRINT
RETURN
showtime:
mins=(maxtime-TIME('E'))%60
secs=TRUNC((maxtime-TIME('E'))//60)
IF secs<10 THEN secs='0'secs
RETURN 'Time Remaining: 'mins':'secs
BREAK_E:
PRINT
saytxt=pen3'*** CONTROL-E BREAK ***'def||CR
PRINT saytxt
i=999999
RETURN ''
BREAK_C:
PRINT CR
EXIT ''
/* bbsExtDL.baud */